home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / Z80 emulator / 68K version / cmd_CB.c next >
Encoding:
Text File  |  1995-11-01  |  13.1 KB  |  473 lines  |  [TEXT/CWIE]

  1.  
  2. /*  -----    0xCB Command Dispatcher -------------------------------------------------
  3.     Z80 Emulator
  4.     Copyright (C) 1994 G.Woigk
  5.     
  6.     This file is part of Mac Spectacle and it is free software
  7.     See application.c for details
  8.             
  9.     This program is distributed in the hope that it will be useful,
  10.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
  12. */
  13.  
  14. cmd_CB:
  15.  
  16. // -----    get next byte of instruction    
  17.     move.b    (ip)+,db
  18.     
  19.  
  20. // -----    exact T cycle handling -------------------------------------
  21.     more4        // most CB commands take up 8 (4+4) T cycles
  22.             // only instructions (hl) take more
  23.  
  24.  
  25. // -----    increment r register ---------------------------------------
  26. #if EXACT_R
  27.     addq.b    #1,r
  28. #endif
  29.  
  30.  
  31. // -----    debugger related testings ----------------------------------
  32. #if CMD_PROFILE || cmd_firstuse
  33.     movea.l    cnt_cb,a0
  34. //    addq.l    #1,(a0,db.l*4)
  35.     lsl    #2,db
  36.     addq.l    #1,(a0,db.l)
  37.     lsr    #2,db
  38. #if cmd_firstuse
  39.     bne.s    cmdp2
  40.     }; Do_1st_Instr ( ip-1 ); asm {
  41. cmdp2:
  42. #endif
  43. #endif
  44.  
  45.  
  46. // -----    execute instruction ----------------------------------------
  47.     dc.w    0x41FB, 0x4A06        // lea    *+$08(D4.l*2),A0
  48.     adda.w    (a0),a0
  49.     jmp    (a0)
  50.     
  51. cb_tab:    dc.w    cb_00,    cb_01,    cb_02,    cb_03,    cb_04,    cb_05,    cb_06,    cb_07
  52.     dc.w    cb_08,    cb_09,    cb_0a,    cb_0b,    cb_0c,    cb_0d,    cb_0e,    cb_0f
  53.     dc.w    cb_10,    cb_11,    cb_12,    cb_13,    cb_14,    cb_15,    cb_16,    cb_17
  54.     dc.w    cb_18,    cb_19,    cb_1a,    cb_1b,    cb_1c,    cb_1d,    cb_1e,    cb_1f
  55.     dc.w    cb_20,    cb_21,    cb_22,    cb_23,    cb_24,    cb_25,    cb_26,    cb_27
  56.     dc.w    cb_28,    cb_29,    cb_2a,    cb_2b,    cb_2c,    cb_2d,    cb_2e,    cb_2f
  57.     dc.w    cb_30,    cb_31,    cb_32,    cb_33,    cb_34,    cb_35,    cb_36,    cb_37
  58.     dc.w    cb_38,    cb_39,    cb_3a,    cb_3b,    cb_3c,    cb_3d,    cb_3e,    cb_3f
  59.     dc.w    cb_40,    cb_41,    cb_42,    cb_43,    cb_44,    cb_45,    bit0hl,    cb_47
  60.     dc.w    cb_48,    cb_49,    cb_4a,    cb_4b,    cb_4c,    cb_4d,    bit1hl,    cb_4f
  61.     dc.w    cb_50,    cb_51,    cb_52,    cb_53,    cb_54,    cb_55,    bit2hl,    cb_57
  62.     dc.w    cb_58,    cb_59,    cb_5a,    cb_5b,    cb_5c,    cb_5d,    bit3hl,    cb_5f
  63.     dc.w    cb_60,    cb_61,    cb_62,    cb_63,    cb_64,    cb_65,    bit4hl,    cb_67
  64.     dc.w    cb_68,    cb_69,    cb_6a,    cb_6b,    cb_6c,    cb_6d,    bit5hl,    cb_6f
  65.     dc.w    cb_70,    cb_71,    cb_72,    cb_73,    cb_74,    cb_75,    bit6hl,    cb_77
  66.     dc.w    cb_78,    cb_79,    cb_7a,    cb_7b,    cb_7c,    cb_7d,    bit7hl,    cb_7f
  67.     dc.w    cb_80,    cb_81,    cb_82,    cb_83,    cb_84,    cb_85,    res0hl,    cb_87
  68.     dc.w    cb_88,    cb_89,    cb_8a,    cb_8b,    cb_8c,    cb_8d,    res1hl,    cb_8f
  69.     dc.w    cb_90,    cb_91,    cb_92,    cb_93,    cb_94,    cb_95,    res2hl,    cb_97
  70.     dc.w    cb_98,    cb_99,    cb_9a,    cb_9b,    cb_9c,    cb_9d,    res3hl,    cb_9f
  71.     dc.w    cb_a0,    cb_a1,    cb_a2,    cb_a3,    cb_a4,    cb_a5,    res4hl,    cb_a7
  72.     dc.w    cb_a8,    cb_a9,    cb_aa,    cb_ab,    cb_ac,    cb_ad,    res5hl,    cb_af
  73.     dc.w    cb_b0,    cb_b1,    cb_b2,    cb_b3,    cb_b4,    cb_b5,    res6hl,    cb_b7
  74.     dc.w    cb_b8,    cb_b9,    cb_ba,    cb_bb,    cb_bc,    cb_bd,    res7hl,    cb_bf
  75.     dc.w    cb_c0,    cb_c1,    cb_c2,    cb_c3,    cb_c4,    cb_c5,    set0hl,    cb_c7
  76.     dc.w    cb_c8,    cb_c9,    cb_ca,    cb_cb,    cb_cc,    cb_cd,    set1hl,    cb_cf
  77.     dc.w    cb_d0,    cb_d1,    cb_d2,    cb_d3,    cb_d4,    cb_d5,    set2hl,    cb_d7
  78.     dc.w    cb_d8,    cb_d9,    cb_da,    cb_db,    cb_dc,    cb_dd,    set3hl,    cb_df
  79.     dc.w    cb_e0,    cb_e1,    cb_e2,    cb_e3,    cb_e4,    cb_e5,    set4hl,    cb_e7
  80.     dc.w    cb_e8,    cb_e9,    cb_ea,    cb_eb,    cb_ec,    cb_ed,    set5hl,    cb_ef
  81.     dc.w    cb_f0,    cb_f1,    cb_f2,    cb_f3,    cb_f4,    cb_f5,    set6hl,    cb_f7
  82.     dc.w    cb_f8,    cb_f9,    cb_fa,    cb_fb,    cb_fc,    cb_fd,    set7hl,    cb_ff
  83.     
  84.     
  85. // --------------------------------------  rlc r  ->  %SZ---P-C  ------------------
  86. cb_00:    lea    RB,a0;    bra.s    rlc    
  87. cb_01:    lea    RC,a0;    bra.s    rlc    
  88. cb_02:    lea    RD,a0;    bra.s    rlc    
  89. cb_03:    lea    RE,a0;    bra.s    rlc    
  90. cb_04:    lea    RH,a0;    bra.s    rlc    
  91. cb_05:    lea    RL,a0
  92. rlc:    move.b    (a0),db
  93.     rol.b    #1,db
  94.     move    ccr,f        // S, Z und C stimmen    
  95.     or.b    (logflags,db.l),f    // P hinzufügen
  96.     move.b    db,(a0)
  97.     m_next
  98.     
  99. cb_06:    movea.l    AHL,a0         // 15 T cycles: 4+4+7
  100. rlcx:    more7            // rlc (hl)
  101.     move.b    (a0),db
  102.     rol.b    #1,db
  103.     move    ccr,f        // S, Z und C stimmen    
  104.     or.b    (logflags,db.l),f    // P hinzufügen
  105.     store_db
  106.     
  107. cb_07:    rol.b    #1,a        // rlc a
  108.     move    ccr,f        
  109.     or.b    (logflags,a.w),f
  110.     m_next
  111.  
  112. // ---------------------------------- rrc r -------------------------
  113. cb_08:    lea    RB,a0;    bra.s    rrc
  114. cb_09:    lea    RC,a0;    bra.s    rrc
  115. cb_0a:    lea    RD,a0;    bra.s    rrc
  116. cb_0b:    lea    RE,a0;    bra.s    rrc
  117. cb_0c:    lea    RH,a0;    bra.s    rrc
  118. cb_0d:    lea    RL,a0
  119. rrc:    move.b    (a0),db
  120.     ror.b    #1,db
  121.     move    ccr,f        // S, Z und C stimmen    
  122.     or.b    (logflags,db.l),f    // P hinzufügen
  123.     move.b    db,(a0)
  124.     m_next
  125.     
  126. cb_0e:    move.l    AHL,a0        // 15 T cycles: 4+4+7
  127. rrcx:    more7            // rrc (hl)
  128.     move.b    (a0),db
  129.     ror.b    #1,db
  130.     move    ccr,f        // S, Z und C stimmen    
  131.     or.b    (logflags,db.l),f    // P hinzufügen
  132.     store_db
  133.     
  134. cb_0f:    ror.b    #1,a        // rrc a
  135.     move    ccr,f            
  136.     or.b    (logflags,a.w),f    
  137.     m_next
  138.  
  139. // -------------------------------------RL r --------------------
  140. cb_10:    lea    RB,a0;    bra.s    rlr
  141. cb_11:    lea    RC,a0;    bra.s    rlr
  142. cb_12:    lea    RD,a0;    bra.s    rlr
  143. cb_13:    lea    RE,a0;    bra.s    rlr
  144. cb_14:    lea    RH,a0;    bra.s    rlr
  145. cb_15:    lea    RL,a0
  146. rlr:    move.b    (a0),db
  147.     lsr.b    #1,f
  148.     roxl.b    #1,db
  149.     move    ccr,f
  150.     or.b    (logflags,db.l),f    
  151.     move.b    db,(a0)
  152.     m_next
  153.     
  154. cb_16:    move.l    AHL,a0        // 15 T cycles: 4+4+7
  155. rlx:    more7            // RL (hl)
  156.     move.b    (a0),db
  157.     lsr.b    #1,f
  158.     roxl.b    #1,db
  159.     move    ccr,f
  160.     or.b    (logflags,db.l),f    
  161.     store_db
  162.     
  163. cb_17:    lsr.b    #1,f        // RL a
  164.     roxl.b    #1,a
  165.     move    ccr,f
  166.     or.b    (logflags,a.w),f    
  167.     m_next
  168.  
  169. // ---------------------------------------- rr r ------------------------------
  170. cb_18:    lea    RB,a0;    bra.s    rr
  171. cb_19:    lea    RC,a0;    bra.s    rr
  172. cb_1a:    lea    RD,a0;    bra.s    rr
  173. cb_1b:    lea    RE,a0;    bra.s    rr
  174. cb_1c:    lea    RH,a0;    bra.s    rr
  175. cb_1d:    lea    RL,a0
  176. rr:    move.b    (a0),db
  177.     lsr.b    #1,f
  178.     roxr.b    #1,db
  179.     move    ccr,f
  180.     or.b    (logflags,db.l),f    
  181.     move.b    db,(a0)
  182.     m_next
  183.     
  184. cb_1e:    movea.l    AHL,a0
  185. rrx:    more7            // rr (hl)
  186.     move.b    (a0),db
  187.     lsr.b    #1,f
  188.     roxr.b    #1,db
  189.     move    ccr,f
  190.     or.b    (logflags,db.l),f    
  191.     store_db
  192.     
  193. cb_1f:    lsr.b    #1,f        // rr a
  194.     roxr.b    #1,a
  195.     move    ccr,f
  196.     or.b    (logflags,a.w),f    
  197.     m_next
  198.  
  199. // ------------------------------------------ sla r ---------------
  200. cb_20:    lea    RB,a0;    bra.s    sla
  201. cb_21:    lea    RC,a0;    bra.s    sla
  202. cb_22:    lea    RD,a0;    bra.s    sla
  203. cb_23:    lea    RE,a0;    bra.s    sla
  204. cb_24:    lea    RH,a0;    bra.s    sla
  205. cb_25:    lea    RL,a0
  206. sla:    move.b    (a0),db
  207.     lsl.b    #1,db
  208.     move    ccr,f
  209.     or.b    (logflags,db.l),f
  210.     move.b    db,(a0)
  211.     m_next
  212.     
  213. cb_26:    movea.l    AHL,a0
  214. slax:    more7            // sla (hl)
  215.     move.b    (a0),db
  216.     lsl.b    #1,db
  217.     move    ccr,f
  218.     or.b    (logflags,db.l),f
  219.     store_db
  220.     
  221. cb_27:    lsl.b    #1,a        // sla a
  222.     move    ccr,f
  223.     or.b    (logflags,a.w),f
  224.     m_next
  225.  
  226. // -------------------------------------- sra r --------------------------
  227. cb_28:    lea    RB,a0;    bra.s    sra
  228. cb_29:    lea    RC,a0;    bra.s    sra
  229. cb_2a:    lea    RD,a0;    bra.s    sra
  230. cb_2b:    lea    RE,a0;    bra.s    sra
  231. cb_2c:    lea    RH,a0;    bra.s    sra
  232. cb_2d:    lea    RL,a0
  233. sra:    move.b    (a0),db
  234.     asr.b    #1,db
  235.     move    ccr,f
  236.     and.w    #1,f
  237.     or.b    (logflags,db.l),f
  238.     move.b    db,(a0)
  239.     m_next
  240.     
  241. cb_2e:    movea.l    AHL,a0
  242. srax:    more7            // sra (hl)
  243.     move.b    (a0),db
  244.     asr.b    #1,db
  245.     move    ccr,f
  246.     and.w    #1,f
  247.     or.b    (logflags,db.l),f
  248.     store_db
  249.     
  250. cb_2f:    asr.b    #1,a        // sra a
  251.     move    ccr,f
  252.     and.w    #1,f
  253.     or.b    (logflags,a.w),f
  254.     m_next
  255.  
  256. // --------------------------------------- sll r (illegal) ------------------------
  257. cb_30:    lea    RB,a0;    bra.s    sll
  258. cb_31:    lea    RC,a0;    bra.s    sll
  259. cb_32:    lea    RD,a0;    bra.s    sll
  260. cb_33:    lea    RE,a0;    bra.s    sll
  261. cb_34:    lea    RH,a0;    bra.s    sll
  262. cb_35:    lea    RL,a0
  263. sll:    move.b    (a0),db
  264.     or.b    #0x10,ccr    // set X
  265.     roxl.b    #1,db
  266.     move    ccr,f
  267.     or.b    (logflags,db.l),f
  268.     move.b    db,(a0)
  269.     do_info_illegals2
  270.     m_next
  271.     
  272. cb_36:    do_info_illegals2        // sll (hl)
  273.     movea.l    AHL,a0
  274. sllx:    more7            // 15 T cycles: 4+4+7
  275.     move.b    (a0),db
  276.     or.b    #0x10,ccr    // set X
  277.     roxl.b    #1,db
  278.     move    ccr,f
  279.     or.b    (logflags,db.l),f
  280.     store_db
  281.     
  282. cb_37:    do_info_illegals2        // sll a
  283.     or.b    #0x10,ccr
  284.     roxl.b    #1,a
  285.     move    ccr,f
  286.     or.b    (logflags,a.w),f
  287.     m_next
  288.  
  289. // ---------------------------------------------- srl r ---------------------
  290. cb_38:    lea    RB,a0;    bra.s    srl
  291. cb_39:    lea    RC,a0;    bra.s    srl
  292. cb_3a:    lea    RD,a0;    bra.s    srl
  293. cb_3b:    lea    RE,a0;    bra.s    srl
  294. cb_3c:    lea    RH,a0;    bra.s    srl
  295. cb_3d:    lea    RL,a0
  296. srl:    move.b    (a0),db
  297.     lsr.b    #1,db
  298.     move    ccr,f
  299.     or.b    (logflags,db.l),f
  300.     move.b    db,(a0)
  301.     m_next
  302.     
  303. cb_3e:    movea.l    AHL,a0
  304. srlx:    more7            // srl (hl)
  305.     move.b    (a0),db
  306.     lsr.b    #1,db
  307.     move    ccr,f
  308.     or.b    (logflags,db.l),f
  309.     store_db
  310.     
  311. cb_3f:    lsr.b    #1,a        // srl a
  312.     move    ccr,f
  313.     or.b    (logflags,a.w),f
  314.     m_next
  315.  
  316.  
  317. // ------------------------------------------- bit n, r --------------------
  318.  
  319. #if exact_bit    // then get S and V bit from target byte
  320. #define    add_sv(R)    and    #1,f    /* C */    ;\
  321.         move.b    R,db        ;\
  322.         moveq    #0x0A,d1 /* S,V */;\
  323.         lea    m68flags,a1    ;\
  324.         and.b    (a1,db.l),d1    ;\
  325.         add.b    d1,f
  326. #else
  327. #define    add_sv(R)    and    #1,f
  328. #endif
  329.  
  330. #define    bit(N,R)    add_sv(R);    ;\
  331.         btst    N,R    ;\
  332.         bne    nxtcmnd    ;\
  333.         addq.b    #4,f    ;\
  334.         m_next
  335.  
  336.  
  337. #if exact_xy_bit    // then we must return via loop!
  338. #define    bitx(N)    more4;        ;\
  339.         add_sv((a0));    ;\
  340.         move    f,ccr    ;\
  341.         btst    N,(a0)    ;\
  342.         move    ccr,f    ;\
  343.         m_next
  344. #else
  345. #define    bitx(N)    more4;        ;\
  346.         add_sv((a0));    ;\
  347.         btst    N,(a0)    ;\
  348.         bne    nxtcmnd    ;\
  349.         addq.b    #4,f    ;\
  350.         m_next
  351. #endif
  352.  
  353. // entry for (hl)            // entry for (ir+dis)
  354. bit0hl:    movea.l    AHL,a0;        bit0x:    bitx(#0)
  355. bit1hl:    movea.l    AHL,a0;        bit1x:    bitx(#1)
  356. bit2hl:    movea.l    AHL,a0;        bit2x:    bitx(#2)
  357. bit3hl:    movea.l    AHL,a0;        bit3x:    bitx(#3)
  358. bit4hl:    movea.l    AHL,a0;        bit4x:    bitx(#4)
  359. bit5hl:    movea.l    AHL,a0;        bit5x:    bitx(#5)
  360. bit6hl:    movea.l    AHL,a0;        bit6x:    bitx(#6)
  361. bit7hl:    movea.l    AHL,a0;        bit7x:    bitx(#7)
  362.  
  363. cb_40:    bit(#0,RB)    ;    cb_41:    bit(#0,RC);    cb_42:    bit(#0,RD);    cb_43:    bit(#0,RE)    
  364. cb_44:    bit(#0,RH)    ;    cb_45:    bit(#0,RL);    cb_47:    bit(#0,a)    
  365. cb_48:    bit(#1,RB)    ;    cb_49:    bit(#1,RC);    cb_4a:    bit(#1,RD)    ;    cb_4b:    bit(#1,RE)
  366. cb_4c:    bit(#1,RH)    ;    cb_4d:    bit(#1,RL);    cb_4f:    bit(#1,a)    
  367. cb_50:    bit(#2,RB)    ;    cb_51:    bit(#2,RC)    ;    cb_52:    bit(#2,RD)    ;    cb_53:    bit(#2,RE)    
  368. cb_54:    bit(#2,RH)    ;    cb_55:    bit(#2,RL);    cb_57:    bit(#2,a)    
  369. cb_58:    bit(#3,RB)    ;    cb_59:    bit(#3,RC)    ;    cb_5a:    bit(#3,RD)    ;    cb_5b:    bit(#3,RE)    
  370. cb_5c:    bit(#3,RH)    ;    cb_5d:    bit(#3,RL);    cb_5f:    bit(#3,a)    
  371. cb_60:    bit(#4,RB)    ;    cb_61:    bit(#4,RC);    cb_62:    bit(#4,RD)    ;    cb_63:    bit(#4,RE)    
  372. cb_64:    bit(#4,RH)    ;    cb_65:    bit(#4,RL);    cb_67:    bit(#4,a)    
  373. cb_68:    bit(#5,RB)    ;    cb_69:    bit(#5,RC)    ;    cb_6a:    bit(#5,RD)    ;    cb_6b:    bit(#5,RE)    
  374. cb_6c:    bit(#5,RH)    ;    cb_6d:    bit(#5,RL);    cb_6f:    bit(#5,a)    
  375. cb_70:    bit(#6,RB)    ;    cb_71:    bit(#6,RC)    ;    cb_72:    bit(#6,RD)    ;    cb_73:    bit(#6,RE)    
  376. cb_74:    bit(#6,RH)    ;    cb_75:    bit(#6,RL);    cb_77:    bit(#6,a)    
  377. cb_78:    bit(#7,RB)    ;    cb_79:    bit(#7,RC)    ;    cb_7a:    bit(#7,RD)    ;    cb_7b:    bit(#7,RE)
  378. cb_7c:    bit(#7,RH)    ;    cb_7d:    bit(#7,RL);    cb_7f:    bit(#7,a)    
  379.  
  380.  
  381. // ------------------------------------- res n,r -------------------------
  382.  
  383. #define    res(N,R)    bclr    N,R;    m_next
  384.  
  385. #if rom_protection
  386. #define    resx(N)    more7        ;\
  387.         move.b    (a0),db    ;\
  388.         bclr    N,db    ;\
  389.         store_db
  390. #else
  391. #define    resx(N)    more7        ;\
  392.         bclr    N,(a0)    ;\
  393.         m_next
  394. #endif
  395.  
  396. // entry for (hl)            // entry for (ir+dis)
  397. res0hl:    movea.l    AHL,a0;        res0x:    resx(#0)
  398. res1hl:    movea.l    AHL,a0;        res1x:    resx(#1)
  399. res2hl:    movea.l    AHL,a0;        res2x:    resx(#2)
  400. res3hl:    movea.l    AHL,a0;        res3x:    resx(#3)
  401. res4hl:    movea.l    AHL,a0;        res4x:    resx(#4)
  402. res5hl:    movea.l    AHL,a0;        res5x:    resx(#5)
  403. res6hl:    movea.l    AHL,a0;        res6x:    resx(#6)
  404. res7hl:    movea.l    AHL,a0;        res7x:    resx(#7)
  405.  
  406. cb_80:    res(#0,RB);    cb_81:    res(#0,RC);    cb_82:    res(#0,RD);    cb_83:    res(#0,RE)    
  407. cb_84:    res(#0,RH);    cb_85:    res(#0,RL);    cb_87:    res(#0,a)
  408. cb_88:    res(#1,RB);    cb_89:    res(#1,RC);    cb_8a:    res(#1,RD);    cb_8b:    res(#1,RE)    
  409. cb_8c:    res(#1,RH);    cb_8d:    res(#1,RL);    cb_8f:    res(#1,a)
  410. cb_90:    res(#2,RB);    cb_91:    res(#2,RC);    cb_92:    res(#2,RD);    cb_93:    res(#2,RE)    
  411. cb_94:    res(#2,RH);    cb_95:    res(#2,RL);    cb_97:    res(#2,a)
  412. cb_98:    res(#3,RB);    cb_99:    res(#3,RC);    cb_9a:    res(#3,RD);    cb_9b:    res(#3,RE)    
  413. cb_9c:    res(#3,RH);    cb_9d:    res(#3,RL);    cb_9f:    res(#3,a)
  414. cb_a0:    res(#4,RB);    cb_a1:    res(#4,RC);    cb_a2:    res(#4,RD);    cb_a3:    res(#4,RE)    
  415. cb_a4:    res(#4,RH);    cb_a5:    res(#4,RL);    cb_a7:    res(#4,a)
  416. cb_a8:    res(#5,RB);    cb_a9:    res(#5,RC);    cb_aa:    res(#5,RD);    cb_ab:    res(#5,RE)    
  417. cb_ac:    res(#5,RH);    cb_ad:    res(#5,RL);    cb_af:    res(#5,a)
  418. cb_b0:    res(#6,RB);    cb_b1:    res(#6,RC);    cb_b2:    res(#6,RD);    cb_b3:    res(#6,RE)    
  419. cb_b4:    res(#6,RH);    cb_b5:    res(#6,RL);    cb_b7:    res(#6,a)
  420. cb_b8:    res(#7,RB);    cb_b9:    res(#7,RC);    cb_ba:    res(#7,RD);    cb_bb:    res(#7,RE)    
  421. cb_bc:    res(#7,RH);    cb_bd:    res(#7,RL);    cb_bf:    res(#7,a)
  422.  
  423.  
  424. // -------------------------------------------- set N,R -------------------------
  425.  
  426. #define    set(N,R)    bset    N,R;    m_next
  427.  
  428. #if rom_protection
  429. #define    setx(N)    more7        ;\
  430.         move.b    (a0),db    ;\
  431.         bset    N,db    ;\
  432.         store_db
  433. #else
  434. #define    setx(N)    more7        ;\
  435.         bset    N,(a0)    ;\
  436.         m_next
  437. #endif
  438.  
  439. set0hl:    movea.l    AHL,a0;        set0x:    setx(#0)
  440. set1hl:    movea.l    AHL,a0;        set1x:    setx(#1)
  441. set2hl:    movea.l    AHL,a0;        set2x:    setx(#2)
  442. set3hl:    movea.l    AHL,a0;        set3x:    setx(#3)
  443. set4hl:    movea.l    AHL,a0;        set4x:    setx(#4)
  444. set5hl:    movea.l    AHL,a0;        set5x:    setx(#5)
  445. set6hl:    movea.l    AHL,a0;        set6x:    setx(#6)
  446. set7hl:    movea.l    AHL,a0;        set7x:    setx(#7)
  447.  
  448. cb_c0:    set(#0,RB);    cb_c1:    set(#0,RC);    cb_c2:    set(#0,RD);    cb_c3:    set(#0,RE)
  449. cb_c4:    set(#0,RH);    cb_c5:    set(#0,RL);    cb_c7:    set(#0,a)
  450. cb_c8:    set(#1,RB);    cb_c9:    set(#1,RC);    cb_ca:    set(#1,RD);    cb_cb:    set(#1,RE)    
  451. cb_cc:    set(#1,RH);    cb_cd:    set(#1,RL);    cb_cf:    set(#1,a)
  452. cb_d0:    set(#2,RB);    cb_d1:    set(#2,RC);    cb_d2:    set(#2,RD);    cb_d3:    set(#2,RE)
  453. cb_d4:    set(#2,RH);    cb_d5:    set(#2,RL);    cb_d7:    set(#2,a)
  454. cb_d8:    set(#3,RB);    cb_d9:    set(#3,RC);    cb_da:    set(#3,RD);    cb_db:    set(#3,RE)    
  455. cb_dc:    set(#3,RH);    cb_dd:    set(#3,RL);    cb_df:    set(#3,a)
  456. cb_e0:    set(#4,RB);    cb_e1:    set(#4,RC);    cb_e2:    set(#4,RD);    cb_e3:    set(#4,RE)    
  457. cb_e4:    set(#4,RH);    cb_e5:    set(#4,RL);    cb_e7:    set(#4,a)    
  458. cb_e8:    set(#5,RB);    cb_e9:    set(#5,RC);    cb_ea:    set(#5,RD);    cb_eb:    set(#5,RE)    
  459. cb_ec:    set(#5,RH);    cb_ed:    set(#5,RL);    cb_ef:    set(#5,a)
  460. cb_f0:    set(#6,RB);    cb_f1:    set(#6,RC);    cb_f2:    set(#6,RD);    cb_f3:    set(#6,RE)    
  461. cb_f4:    set(#6,RH);    cb_f5:    set(#6,RL);    cb_f7:    set(#6,a)
  462. cb_f8:    set(#7,RB);    cb_f9:    set(#7,RC);    cb_fa:    set(#7,RD);    cb_fb:    set(#7,RE)
  463. cb_fc:    set(#7,RH);    cb_fd:    set(#7,RL);    cb_ff:    set(#7,a)
  464.  
  465. #undef    bit
  466. #undef    bitx
  467. #undef    set
  468. #undef    setx
  469. #undef    res
  470. #undef    resx
  471. #undef    add_sv
  472.  
  473.